{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<!--NAVIGATION-->\n",
    "< [Introducing Scikit-Learn](05.02-Introducing-Scikit-Learn.ipynb) | [Contents](Index.ipynb) | [Feature Engineering](05.04-Feature-Engineering.ipynb) >\n",
    "\n",
    "<a href=\"https://colab.research.google.com/github/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/05.03-Hyperparameters-and-Model-Validation.ipynb\"><img align=\"left\" src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open in Colab\" title=\"Open and Execute in Google Colaboratory\"></a>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Hyperparameters and Model Validation\n",
    "\n",
    "# 超参数和模型验证"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "> In the previous section, we saw the basic recipe for applying a supervised machine learning model:\n",
    "\n",
    "> 1. Choose a class of model\n",
    "2. Choose model hyperparameters\n",
    "3. Fit the model to the training data\n",
    "4. Use the model to predict labels for new data\n",
    "\n",
    "上一节中，我们学习了应用有监督机器学习的基本配方：\n",
    "\n",
    "1. 选择一个模型类别\n",
    "2. 选择模型超参数\n",
    "3. 将模型拟合到训练数据上\n",
    "4. 将模型在新数据上进行预测\n",
    "\n",
    "> The first two pieces of this—the choice of model and choice of hyperparameters—are perhaps the most important part of using these tools and techniques effectively.\n",
    "In order to make an informed choice, we need a way to *validate* that our model and our hyperparameters are a good fit to the data.\n",
    "While this may sound simple, there are some pitfalls that you must avoid to do this effectively.\n",
    "\n",
    "上面的前两步，选择模型类别和超参数，也许是有效使用这些工具和技术的最关键部分。为了作出一个明智的选择，我们需要一个方式来*验证*我们的模型和超参数，看它们是否拟合数据集。虽然这个方式听起来很简单，但是里面有很多坑你需要避开。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Thinking about Model Validation\n",
    "\n",
    "## 思考模型验证\n",
    "\n",
    "> In principle, model validation is very simple: after choosing a model and its hyperparameters, we can estimate how effective it is by applying it to some of the training data and comparing the prediction to the known value.\n",
    "\n",
    "原则上，模型验证非常简单：选择了模型类别和它的超参数之后，我们将它应用到一些训练数据上进行训练，然后将它的预测值和已知值进行比较。\n",
    "\n",
    "> The following sections first show a naive approach to model validation and why it\n",
    "fails, before exploring the use of holdout sets and cross-validation for more robust\n",
    "model evaluation.\n",
    "\n",
    "下面首先介绍一个原始的模型验证方法和为什么它不正确，然后再介绍使用预留出的子集及交叉验证来获得更健壮的模型评估结果。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Model validation the wrong way\n",
    "\n",
    "### 错误的模型验证\n",
    "\n",
    "> Let's demonstrate the naive approach to validation using the Iris data, which we saw in the previous section.\n",
    "We will start by loading the data:\n",
    "\n",
    "让我们展示使用鸢尾花数据集来进行模型验证的一个原始方法，首导入数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "iris = load_iris()\n",
    "X = iris.data\n",
    "y = iris.target"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> Next we choose a model and hyperparameters. Here we'll use a *k*-neighbors classifier with ``n_neighbors=1``.\n",
    "This is a very simple and intuitive model that says \"the label of an unknown point is the same as the label of its closest training point:\"\n",
    "\n",
    "下面我们选择模型和超参数。这里我们会使用*k近邻*分类器，超参数`n_neighbors=1`。这是一个非常简单和直观的模型，它认为“未知的点的标签与距离它最近的训练点的标签是一样的”。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "model = KNeighborsClassifier(n_neighbors=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> Then we train the model, and use it to predict labels for data we already know:\n",
    "\n",
    "然后我们训练模型，用训练好的模型来预测训练集的标签："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.fit(X, y)\n",
    "y_model = model.predict(X)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> Finally, we compute the fraction of correctly labeled points:\n",
    "\n",
    "最后，我们计算得到准确率："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "accuracy_score(y, y_model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> We see an accuracy score of 1.0, which indicates that 100% of points were correctly labeled by our model!\n",
    "But is this truly measuring the expected accuracy? Have we really come upon a model that we expect to be correct 100% of the time?\n",
    "\n",
    "我们看到准确率是1.0，这表示100%的点都被我们的模型正确标记了。但是这是否代表这我们模型真实的准确率？我们是否真的能碰到一个模型能够100%正确的处理所有数据？\n",
    "\n",
    "> As you may have gathered, the answer is no.\n",
    "In fact, this approach contains a fundamental flaw: *it trains and evaluates the model on the same data*.\n",
    "Furthermore, the nearest neighbor model is an *instance-based* estimator that simply stores the training data, and predicts labels by comparing new data to these stored points: except in contrived cases, it will get 100% accuracy *every time!*\n",
    "\n",
    "可能你从直觉上就能得到答案是否定的。事实上，这个方法有着一个最基本的错误：*使用同样的数据集来训练和评估性能*。并且，最近邻模型是一个*基于实例*的评估器保存训练数据，然后将这些新数据和保存的数据点进行比较来预测标签：除非在人为干预情况下，它总是会获得100%的准确率。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Model validation the right way: Holdout sets\n",
    "\n",
    "### 模型验证的正确方式：保留部分数据\n",
    "\n",
    "> So what can be done?\n",
    "A better sense of a model's performance can be found using what's known as a *holdout set*: that is, we hold back some subset of the data from the training of the model, and then use this holdout set to check the model performance.\n",
    "This splitting can be done using the ``train_test_split`` utility in Scikit-Learn:\n",
    "\n",
    "因此可以怎么做？将一部分数据集*保留*出来不参与训练，并使用它们对模型的性能进行评估才是正确的办法：即我们将数据中的部分子集从训练集中分离出来，然后再将它们预测的结果和预先标记的结果进行对比得到模型性能。这可以通过Scikit-Learn的`train_test_split`工具完成："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9066666666666666"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "# 将数据集按照50%分成两个子集-训练集和测试集\n",
    "X1, X2, y1, y2 = train_test_split(X, y, random_state=0,\n",
    "                                  train_size=0.5)\n",
    "\n",
    "# 使用训练集对模型进行拟合\n",
    "model.fit(X1, y1)\n",
    "\n",
    "# 使用模型对测试集进行预测，并评估结果\n",
    "y2_model = model.predict(X2)\n",
    "accuracy_score(y2, y2_model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> We see here a more reasonable result: the nearest-neighbor classifier is about 90% accurate on this hold-out set.\n",
    "The hold-out set is similar to unknown data, because the model has not \"seen\" it before.\n",
    "\n",
    "这样我们就得到了一个更加合理的结果：最近邻分类器在这样划分了训练集和测试集后，能得到大约90%的准确率。这里保留出的子数据集类似未知的数据，因为模型根本没有*见过*它们。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Model validation via cross-validation\n",
    "\n",
    "### 对模型使用交叉验证\n",
    "\n",
    "> One disadvantage of using a holdout set for model validation is that we have lost a portion of our data to the model training.\n",
    "In the above case, half the dataset does not contribute to the training of the model!\n",
    "This is not optimal, and can cause problems – especially if the initial set of training data is small.\n",
    "\n",
    "上面的保留子数据集来验证模型的方式有一个缺点，那就是我们其中一部分的数据无法参与模型训练过程。在上面例子中，一半的数据集对于训练模型没有任何贡献。这不是最优化的方式，而且可能导致问题，特别是原始训练数据规模比较小的情况下。\n",
    "\n",
    "> One way to address this is to use *cross-validation*; that is, to do a sequence of fits where each subset of the data is used both as a training set and as a validation set.\n",
    "Visually, it might look something like this:\n",
    "\n",
    "解决这个缺点的方法是使用*交叉验证*；也就是使用一系列的拟合过程，其中每次拟合的时候都是用完整的数据集，但是不同的训练集和测试集来进行验证。下面描绘了这个过程：\n",
    "\n",
    "![](figures/05.03-2-fold-CV.png)\n",
    "[附录中生成图像的代码](06.00-Figure-Code.ipynb#2-Fold-Cross-Validation)\n",
    "\n",
    "> Here we do two validation trials, alternately using each half of the data as a holdout set.\n",
    "Using the split data from before, we could implement it like this:\n",
    "\n",
    "这里我们使用两次验证过程，每次使用不同的一半数据作为保留的数据集来验证模型。使用上面分好的数据，我们使用下面的代码实现："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.96, 0.9066666666666666)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y2_model = model.fit(X1, y1).predict(X2)\n",
    "y1_model = model.fit(X2, y2).predict(X1)\n",
    "accuracy_score(y1, y1_model), accuracy_score(y2, y2_model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> What comes out are two accuracy scores, which we could combine (by, say, taking the mean) to get a better measure of the global model performance.\n",
    "This particular form of cross-validation is a *two-fold cross-validation*—that is, one in which we have split the data into two sets and used each in turn as a validation set.\n",
    "\n",
    "上面输出了两个准确率结果，我们可以组合（例如通过取平均值）来获得更好的全局性能结果。上面这个特殊的交叉验证过程被称为*双重检查验证*，也就是我们将数据均分为两个子数据集，然后依次使用它们作为测试集。\n",
    "\n",
    "> We could expand on this idea to use even more trials, and more folds in the data—for example, here is a visual depiction of five-fold cross-validation:\n",
    "\n",
    "我们可以将这个方法扩展到更多的拟合过程，将数据划分为更多子集进行更多重训练验证，例如下图是一个五重交叉验证：\n",
    "\n",
    "![](figures/05.03-5-fold-CV.png)\n",
    "[附录中生成图像的代码](06.00-Figure-Code.ipynb#5-Fold-Cross-Validation)\n",
    "\n",
    "> Here we split the data into five groups, and use each of them in turn to evaluate the model fit on the other 4/5 of the data.\n",
    "This would be rather tedious to do by hand, and so we can use Scikit-Learn's ``cross_val_score`` convenience routine to do it succinctly:\n",
    "\n",
    "这里我们将数据分成5组，每次使用其中一组来评估模型，其余的4/5用来训练模型。每次都要手动完成这项工作是很无聊的，因此我们可以使用Scikit-Learn的`cross_val_score`工具来直接完整它："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.96666667, 0.96666667, 0.93333333, 0.93333333, 1.        ])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import cross_val_score\n",
    "cross_val_score(model, X, y, cv=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> Repeating the validation across different subsets of the data gives us an even better idea of the performance of the algorithm.\n",
    "\n",
    "使用不同的子数据集重复对模型进行验证能为我们提供更好的算法性能结果。\n",
    "\n",
    "> Scikit-Learn implements a number of useful cross-validation schemes that are useful in particular situations; these are implemented via iterators in the ``cross_validation`` module.\n",
    "For example, we might wish to go to the extreme case in which our number of folds is equal to the number of data points: that is, we train on all points but one in each trial.\n",
    "This type of cross-validation is known as *leave-one-out* cross validation, and can be used as follows:\n",
    "\n",
    "Scikit-Learn实现了许多有用的交叉验证方案，它们适合于特定的场景；这些方案都是在`model_selection`模块中实现的。例如，我们可能希望采用一种极端的方案，该方案中数据的分组等于数据的样本数：也就是说，我们使用除了一个数据点外的其他所有数据进行训练。这种交叉验证被成为*leave-one-out*交叉验证，如下例：\n",
    "\n",
    "译者注：本翻译将所有旧版的`cross_validation`模块改为了`model_selection`模块，下面的LeaveOneOut实例化也修改为无参数的新版本。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "       1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "       1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "       1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "       1., 1., 0., 1., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0., 1.,\n",
       "       1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "       1., 1., 1., 1., 0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,\n",
       "       0., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0., 1., 1.,\n",
       "       1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import LeaveOneOut\n",
    "scores = cross_val_score(model, X, y, cv=LeaveOneOut())\n",
    "scores"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> Because we have 150 samples, the leave one out cross-validation yields scores for 150 trials, and the score indicates either successful (1.0) or unsuccessful (0.0) prediction.\n",
    "Taking the mean of these gives an estimate of the error rate:\n",
    "\n",
    "因为我们有150个样本，leave-one-out交叉验证会得到150个验证结果，结果只有两种状态：验证成功（1.0）或验证失败（0.0）。对上面的结果数组求平均值能得到一个估计的准确率："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.96"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scores.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> Other cross-validation schemes can be used similarly.\n",
    "For a description of what is available in Scikit-Learn, use IPython to explore the ``sklearn.cross_validation`` submodule, or take a look at Scikit-Learn's online [cross-validation documentation](http://scikit-learn.org/stable/modules/cross_validation.html).\n",
    "\n",
    "其他交叉验证方案也是类似的使用。想要查阅Scikit-Learn中可用的交叉验证方案，可以使用IPython来浏览`sklean.model_selection`模块或者浏览Scikit-Learn在线[交叉验证文档](http://scikit-learn.org/stable/modules/cross_validation.html)。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Selecting the Best Model\n",
    "\n",
    "## 选择最佳模型\n",
    "\n",
    "> Now that we've seen the basics of validation and cross-validation, we will go into a litte more depth regarding model selection and selection of hyperparameters.\n",
    "These issues are some of the most important aspects of the practice of machine learning, and I find that this information is often glossed over in introductory machine learning tutorials.\n",
    "\n",
    "现在我们已经学习了模型验证和交叉验证的基础，我们可以继续深入了解模型选择和超参数选择的内容。这些话题是机器学习实践中最重要的一些方面，作者发现这部分信息经常在机器学习入门教程中被一笔带过。\n",
    "\n",
    "> Of core importance is the following question: *if our estimator is underperforming, how should we move forward?*\n",
    "There are several possible answers:\n",
    "\n",
    "> - Use a more complicated/more flexible model\n",
    "- Use a less complicated/less flexible model\n",
    "- Gather more training samples\n",
    "- Gather more data to add features to each sample\n",
    "\n",
    "其中的核心问题是：*我们的评估器是否表现不佳？我们应该如何继续改进？*这可能有如下的答案：\n",
    "\n",
    "- 使用一个更加复杂或更加灵活的模型\n",
    "- 使用一个没那么复杂或没那么灵活的模型\n",
    "- 收集更多的训练样本\n",
    "- 对每个样本收集更多信息，增加特征\n",
    "\n",
    "> The answer to this question is often counter-intuitive.\n",
    "In particular, sometimes using a more complicated model will give worse results, and adding more training samples may not improve your results!\n",
    "The ability to determine what steps will improve your model is what separates the successful machine learning practitioners from the unsuccessful.\n",
    "\n",
    "对这个问题的解答经常是反直觉的。比方说有时使用一个更复杂的模型可能会得到一个更差的结果，而增加样本数量不能改进你的结果。决定采用哪些方法步骤来改进模型的能力是成功的机器学习实践者和不成功的实践者的主要区别。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The Bias-variance trade-off\n",
    "\n",
    "### 偏差方差的权衡\n",
    "\n",
    "> Fundamentally, the question of \"the best model\" is about finding a sweet spot in the tradeoff between *bias* and *variance*.\n",
    "Consider the following figure, which presents two regression fits to the same dataset:\n",
    "\n",
    "“最佳模型”问题基本上是关于寻找*偏差*和*方差*的最佳均衡点。考虑下图，这是对同一个数据集的两个回归：\n",
    "\n",
    "![](figures/05.03-bias-variance.png)\n",
    "[附录中生成图像的代码](06.00-Figure-Code.ipynb#Bias-Variance-Tradeoff)\n",
    "\n",
    "> It is clear that neither of these models is a particularly good fit to the data, but they fail in different ways.\n",
    "\n",
    "很明显这两个模型都不是拟合数据的最佳模型，但是它们失败的地方是不一样的。\n",
    "\n",
    "> The model on the left attempts to find a straight-line fit through the data.\n",
    "Because the data are intrinsically more complicated than a straight line, the straight-line model will never be able to describe this dataset well.\n",
    "Such a model is said to *underfit* the data: that is, it does not have enough model flexibility to suitably account for all the features in the data; another way of saying this is that the model has high *bias*.\n",
    "\n",
    "左边的模型试图找出一条直线来拟合数据。因为这个数据很明显比直线要复杂的多，因此直线模型不可能很好的描述这个数据集。这样的模型我们成为“欠拟合”：也就是说，它没有提供足够的模型灵活性来反映出数据的所有特征；用另一种说法就是这个模型有着高的*偏差*。\n",
    "\n",
    "> The model on the right attempts to fit a high-order polynomial through the data.\n",
    "Here the model fit has enough flexibility to nearly perfectly account for the fine features in the data, but even though it very accurately describes the training data, its precise form seems to be more reflective of the particular noise properties of the data rather than the intrinsic properties of whatever process generated that data.\n",
    "Such a model is said to *overfit* the data: that is, it has so much model flexibility that the model ends up accounting for random errors as well as the underlying data distribution; another way of saying this is that the model has high *variance*.\n",
    "\n",
    "右边的模型试图使用一个高阶的多项式来拟合数据。这个模型具有足够的灵活性几乎完美的描述了数据中的特征，虽然它很精确的描述了训练数据，但是它的这种精确性可能更多反映了对数据噪声特征的反映而不是内在主要特征的反映。这样的模型被称为是“过拟合”的：也就是说它有着很好的模型灵活性，甚至反映了数据的随机误差；另一种说法就是这个模型有着高的*方差*。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> To look at this in another light, consider what happens if we use these two models to predict the y-value for some new data.\n",
    "In the following diagrams, the red/lighter points indicate data that is omitted from the training set:\n",
    "\n",
    "从另一个角度来看，如果我们使用这两个模型来预测一些新数据的y值的话，下图中的红色/淡色的点代表这数据中从训练集中分出来的数据点：\n",
    "\n",
    "![](figures/05.03-bias-variance-2.png)\n",
    "[附录中生成图像的代码](06.00-Figure-Code.ipynb#Bias-Variance-Tradeoff-Metrics)\n",
    "\n",
    "> The score here is the $R^2$ score, or [coefficient of determination](https://en.wikipedia.org/wiki/Coefficient_of_determination), which measures how well a model performs relative to a simple mean of the target values. $R^2=1$ indicates a perfect match, $R^2=0$ indicates the model does no better than simply taking the mean of the data, and negative values mean even worse models.\n",
    "From the scores associated with these two models, we can make an observation that holds more generally:\n",
    "\n",
    "> - For high-bias models, the performance of the model on the validation set is similar to the performance on the training set.\n",
    "- For high-variance models, the performance of the model on the validation set is far worse than the performance on the training set.\n",
    "\n",
    "这里使用的评估标准是$R^2$分值，或者称为[决定系数](https://en.wikipedia.org/wiki/Coefficient_of_determination)，这是用来衡量模型相对目标值的简单平均值比较预测性能的好方法。$R^2=1$代表完全复合，$R^2=0$代表模型与简单取数据平均值没有区别，负数值代表模型的表现还不如简单取平均值。从两个模型的这个分值中，我们可以得到更普遍的结论：\n",
    "\n",
    "- 对于高偏差的模型来说，模型的性能在测试集上与在训练集上类似。\n",
    "- 对于高方差的模型来说，模型的性能在测试集上比在训练集上差了非常多。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> If we imagine that we have some ability to tune the model complexity, we would expect the training score and validation score to behave as illustrated in the following figure:\n",
    "\n",
    "如果想象我们有某种能力能够调节模型的复杂度，我们可以绘制下面的图形代表这训练分数和测试分数的情况：\n",
    "\n",
    "![](figures/05.03-validation-curve.png)\n",
    "[附录中生成图像的代码](06.00-Figure-Code.ipynb#Validation-Curve)\n",
    "\n",
    "> The diagram shown here is often called a *validation curve*, and we see the following essential features:\n",
    "\n",
    "> - The training score is everywhere higher than the validation score. This is generally the case: the model will be a better fit to data it has seen than to data it has not seen.\n",
    "- For very low model complexity (a high-bias model), the training data is under-fit, which means that the model is a poor predictor both for the training data and for any previously unseen data.\n",
    "- For very high model complexity (a high-variance model), the training data is over-fit, which means that the model predicts the training data very well, but fails for any previously unseen data.\n",
    "- For some intermediate value, the validation curve has a maximum. This level of complexity indicates a suitable trade-off between bias and variance.\n",
    "\n",
    "这幅图像通常被称为*验证曲线*，我们观察到下面这些关键特征：\n",
    "\n",
    "- 训练分数在任何地方都比验证分数要高。这基于理论：模型在它见过的数据上会比它没见过的数据上更加拟合。\n",
    "- 对于低复杂度模型（高偏差模型）来说，训练数据是欠拟合的，这代表着模型即不能很好的预测训练数据也不能很好的预测未知数据。\n",
    "- 对于非常高复杂度模型（高方法模型）来说，训练数据是过拟合的，这代表着模型能非常好的预测训练数据，但是不能很好的预测未知数据。\n",
    "- 对于中间部分来说，验证曲线又一个最大值。这个点代表着偏差和方差的最佳平衡点。\n",
    "\n",
    "> The means of tuning the model complexity varies from model to model; when we discuss individual models in depth in later sections, we will see how each model allows for such tuning.\n",
    "\n",
    "不同的模型有着不同的模型复杂度调整的含义；当我们在后面章节深入讨论单个模型时，我们会看到每个模型这个方面的调整方法。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### Validation curves in Scikit-Learn\n",
    "\n",
    "### Scikit-Learn中的验证曲线\n",
    "\n",
    "> Let's look at an example of using cross-validation to compute the validation curve for a class of models.\n",
    "Here we will use a *polynomial regression* model: this is a generalized linear model in which the degree of the polynomial is a tunable parameter.\n",
    "For example, a degree-1 polynomial fits a straight line to the data; for model parameters $a$ and $b$:\n",
    "\n",
    "下面我们来看一个例子说明使用交叉验证来计算一个模型类别的验证曲线。这里我们将使用*多项式回归*模型：这是一个广义的线性模型，其中的多项式的阶是可调整的参数。例如，一阶的多项式将数据拟合到一条直线上；模型参数有$a$和$b$：\n",
    "\n",
    "$$\n",
    "y = ax + b\n",
    "$$\n",
    "\n",
    "> A degree-3 polynomial fits a cubic curve to the data; for model parameters $a, b, c, d$:\n",
    "\n",
    "一个三阶的多项式将数据是配到一条三次方程曲线上；模型参数有$a, b, c, d$：\n",
    "\n",
    "$$\n",
    "y = ax^3 + bx^2 + cx + d\n",
    "$$\n",
    "\n",
    "> We can generalize this to any number of polynomial features.\n",
    "In Scikit-Learn, we can implement this with a simple linear regression combined with the polynomial preprocessor.\n",
    "We will use a *pipeline* to string these operations together (we will discuss polynomial features and pipelines more fully in [Feature Engineering](05.04-Feature-Engineering.ipynb)):\n",
    "\n",
    "我们可以推广到任意阶的多项式中。在Scikit-Learn中我们可以通过将线性回归与多项式预处理器结合起来实现这个任务。我们会使用*管道*将这些操作串联起来（我们会在[特征工程](05.04-Feature-Engineering.ipynb)中更详细的讨论多项式特征和管道）："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.pipeline import make_pipeline\n",
    "\n",
    "def PolynomialRegression(degree=2, **kwargs):\n",
    "    return make_pipeline(PolynomialFeatures(degree),\n",
    "                         LinearRegression(**kwargs))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "> Now let's create some data to which we will fit our model:\n",
    "\n",
    "现在我们让我们创建一些数据来拟合模型："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "def make_data(N, err=1.0, rseed=1):\n",
    "    # randomly sample the data\n",
    "    rng = np.random.RandomState(rseed)\n",
    "    X = rng.rand(N, 1) ** 2\n",
    "    y = 10 - 1. / (X.ravel() + 0.1)\n",
    "    if err > 0:\n",
    "        y += err * rng.randn(N)\n",
    "    return X, y\n",
    "\n",
    "X, y = make_data(40)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> We can now visualize our data, along with polynomial fits of several degrees:\n",
    "\n",
    "现在可以可视化我们的数据，包含着不同阶的多项式匹配结果："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn; seaborn.set()  # 用Seaborn可视化\n",
    "\n",
    "X_test = np.linspace(-0.1, 1.1, 500)[:, None]\n",
    "\n",
    "plt.scatter(X.ravel(), y, color='black')\n",
    "axis = plt.axis()\n",
    "for degree in [1, 3, 5]:\n",
    "    y_test = PolynomialRegression(degree).fit(X, y).predict(X_test)\n",
    "    plt.plot(X_test.ravel(), y_test, label='degree={0}'.format(degree))\n",
    "plt.xlim(-0.1, 1.0)\n",
    "plt.ylim(-2, 12)\n",
    "plt.legend(loc='best');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> The knob controlling model complexity in this case is the degree of the polynomial, which can be any non-negative integer.\n",
    "A useful question to answer is this: what degree of polynomial provides a suitable trade-off between bias (under-fitting) and variance (over-fitting)?\n",
    "\n",
    "这个例子中控制模型复杂度的开关就是多项式的阶数，可以使任何非负的整数。这里有用的问题是：哪个阶的多项式在偏差（欠拟合）和方差（过拟合）之间合适的平衡？\n",
    "\n",
    "> We can make progress in this by visualizing the validation curve for this particular data and model; this can be done straightforwardly using the ``validation_curve`` convenience routine provided by Scikit-Learn.\n",
    "Given a model, data, parameter name, and a range to explore, this function will automatically compute both the training score and validation score across the range:\n",
    "\n",
    "我们还可以进一步将这个特殊的数据和模型的验证曲线绘制出来；这可以直接通过Scikit-Learn提供的`validation_curve`工具完成。给定模型、数据、参数名称和一个范围，这个函数能够自动计算范围内所有的训练分数和验证分数："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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d92dP/zh+m4/o7S0jLvuilamLPN09zv3V1Lkr2/kwnUnbUnCERojISU5BqTbbrsZgF/84kwMw+Suu+7nzjtvIzc3l++++466uloefngxf/rT79iw4Vt8Pi+jR4/h6quvobCwkLVr32PBgr/y0EOLKC/fxNlnn8qcOcfx9ttraG1t5de/voZ99tm37bUVK14FYNq0SZxzzvm8/vpqtm7dygUXXMyMGbMBWL16FQ88cA9ZWVnMnHkoDzxwDytXvk5ubm6H2N94YzULF96LaToIBPxcdtmvmDhxEtXVVcyffyvff2+PUT300MM59dSfsWVLDbfeeiObNn2PZVnMm3cqRx75QwCOP/4Y5sz5Me+++w6jRo3m6quvYdmyF/jXv54mEAiQn5/PFVf8mu23H5uiv0ziSbnwvpEk0Um4btOIgD23dWC4dDclw1NPOVmyxJXw7RqGwYknepk7t+uz4ssvv4pnnnmae+99uMNB+JNPPubuux8gJ8cuPnzJJVdQHOrXfuCBe3jiicf4xS8u2mZ7W7duZc899+bccy9g5cpl3Hffndx778NRPzsvL48HH3ycjz76gGuuuZoZM2ZTW7uFW275M/ff/whjxmzPU089ETP2Bx+8n8sv/zX77DOBQCBAa2sLANde+3umTJnKDTfcCkBdnV1WZv78v7DTTjtz441/YfPmzZx11skotSs77TQOgM2bN7e1dj788H1eeeUlFixYiNvt5q231nDjjdfG/F36A0uK/PWJJIlOKivtHrhSb2huaxlIN6jMmDG7LUEALF/+AitXLsfv99HS0sqYMdtHfV9OTi5Tpx4MwB577MXdd8+P+RmzZx/ett7mzdV4PB4+/fRjxo9Xbds/+ugfcdddd0R9/377TeLuu+9g5sxDOfDAg9hpp3E0NzfzyScfcccdC9rWCye39957hwsvvBSA0tJSpkyZxtq177UliaOOOrrtPWvWvM5XX33JOeecAdi3sDY01Mf+wvqBYEkJzs82pTuMfkuSRCdVVQaFhRbZNaHupuFyTSIZ5s71d3u23xt9vec/N7c9QXz44fs8++w/uffehykpKWHlyuU899y/or7P7W5vFZmmSSAQ+3dzu90AOEKzHQYCASzL6vFdQBdffDlff/0V//3vu/z+979m7tyTOfTQw7t8T+dtRz7PyWlvSVkWHH30HM4++7wexdIfSEui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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.model_selection import validation_curve\n",
    "degree = np.arange(0, 21)\n",
    "train_score, val_score = validation_curve(PolynomialRegression(), X, y,\n",
    "                                          'polynomialfeatures__degree', degree, cv=7)\n",
    "\n",
    "plt.plot(degree, np.median(train_score, 1), color='blue', label='training score')\n",
    "plt.plot(degree, np.median(val_score, 1), color='red', label='validation score')\n",
    "plt.legend(loc='best')\n",
    "plt.ylim(0, 1)\n",
    "plt.xlabel('degree')\n",
    "plt.ylabel('score');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> This shows precisely the qualitative behavior we expect: the training score is everywhere higher than the validation score; the training score is monotonically improving with increased model complexity; and the validation score reaches a maximum before dropping off as the model becomes over-fit.\n",
    "\n",
    "上图精确的展示了我们期望的定量行为：训练分数在任何地方都高于验证分数；训练分数是一个单调递增函数，随着模型复杂度增加而增加；然而验证分数在达到最大值后会因为过拟合而开始下降。\n",
    "\n",
    "> From the validation curve, we can read-off that the optimal trade-off between bias and variance is found for a third-order polynomial; we can compute and display this fit over the original data as follows:\n",
    "\n",
    "从验证曲线中，我们可以看到最优的偏差和方差平衡是在三阶的多项式出现；我们可以在原始数据上计算并展示这个模型："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X.ravel(), y)\n",
    "lim = plt.axis()\n",
    "y_test = PolynomialRegression(3).fit(X, y).predict(X_test)\n",
    "plt.plot(X_test.ravel(), y_test);\n",
    "plt.axis(lim);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> Notice that finding this optimal model did not actually require us to compute the training score, but examining the relationship between the training score and validation score can give us useful insight into the performance of the model.\n",
    "\n",
    "请注意寻找这个最优模型并不需要计算训练分数，但是检验训练分数和验证分数之间的关系能为我们提供模型性能的内在含义。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Learning Curves\n",
    "\n",
    "## 学习曲线\n",
    "\n",
    "> One important aspect of model complexity is that the optimal model will generally depend on the size of your training data.\n",
    "For example, let's generate a new dataset with a factor of five more points:\n",
    "\n",
    "对于模型复杂度来说一个重要的相关性是它依赖于训练数据的规模。例如，我们创建一个数据集，具有5倍数量的样本："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "X2, y2 = make_data(200)\n",
    "plt.scatter(X2.ravel(), y2);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> We will duplicate the preceding code to plot the validation curve for this larger dataset; for reference let's over-plot the previous results as well:\n",
    "\n",
    "我们重复前面的代码来绘制这个大的数据集的验证曲线；为了参考我们将前面的结果也画出来："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "degree = np.arange(21)\n",
    "train_score2, val_score2 = validation_curve(PolynomialRegression(), X2, y2,\n",
    "                                            'polynomialfeatures__degree', degree, cv=7)\n",
    "\n",
    "plt.plot(degree, np.median(train_score2, 1), color='blue', label='training score')\n",
    "plt.plot(degree, np.median(val_score2, 1), color='red', label='validation score')\n",
    "plt.plot(degree, np.median(train_score, 1), color='blue', alpha=0.3, linestyle='dashed')\n",
    "plt.plot(degree, np.median(val_score, 1), color='red', alpha=0.3, linestyle='dashed')\n",
    "plt.legend(loc='lower center')\n",
    "plt.ylim(0, 1)\n",
    "plt.xlabel('degree')\n",
    "plt.ylabel('score');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> The solid lines show the new results, while the fainter dashed lines show the results of the previous smaller dataset.\n",
    "It is clear from the validation curve that the larger dataset can support a much more complicated model: the peak here is probably around a degree of 6, but even a degree-20 model is not seriously over-fitting the data—the validation and training scores remain very close.\n",
    "\n",
    "实现展示新的结果，而虚线展示的是前面小数据集的结果。从验证曲线很明显看出大的数据集能够支持更复杂的模型：上图中的峰值大约出现在阶数6的位置上，但是甚至到了20阶的多项式模型中，也没有出现严重的过拟合，验证分数和训练分数依然很接近。\n",
    "\n",
    "> Thus we see that the behavior of the validation curve has not one but two important inputs: the model complexity and the number of training points.\n",
    "It is often useful to to explore the behavior of the model as a function of the number of training points, which we can do by using increasingly larger subsets of the data to fit our model.\n",
    "A plot of the training/validation score with respect to the size of the training set is known as a *learning curve.*\n",
    "\n",
    "因此我们看到了验证曲线不止有一个而是有两个重要的输入参数：模型复杂度和数据样本量。研究模型的性能与样本量之间的关系函数经常也很有帮助，我们可以通过不断增加数据中用来训练的子数据集规模来进行研究。绘制一幅训练/验证分数随着训练集规模变化的图像被成为*学习曲线*。\n",
    "\n",
    "> The general behavior we would expect from a learning curve is this:\n",
    "\n",
    "> - A model of a given complexity will *overfit* a small dataset: this means the training score will be relatively high, while the validation score will be relatively low.\n",
    "- A model of a given complexity will *underfit* a large dataset: this means that the training score will decrease, but the validation score will increase.\n",
    "- A model will never, except by chance, give a better score to the validation set than the training set: this means the curves should keep getting closer together but never cross.\n",
    "\n",
    "从学习曲线中我们一般可以观察到下面的结论：\n",
    "\n",
    "- 在小数据集的情况下，一个给定复杂度的模型很可能会*过拟合*：这意味着训练分数相对来说比较高而验证分数比较低。\n",
    "- 在大数据集的情况下，一个给定复杂度的模型很可能会*欠拟合*：这意味着训练分数会下降而验证分数会上升。\n",
    "- 一个模型应该永远（除非很偶然）在训练集给出比测试集更高的分值：这意味着两根曲线会一直接近但是不会相交。\n",
    "\n",
    "> With these features in mind, we would expect a learning curve to look qualitatively like that shown in the following figure:\n",
    "\n",
    "有了上述结论，我们预计的学习曲线如下图："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](figures/05.03-learning-curve.png)\n",
    "[附录中生成图像的代码](06.00-Figure-Code.ipynb#Learning-Curve)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> The notable feature of the learning curve is the convergence to a particular score as the number of training samples grows.\n",
    "In particular, once you have enough points that a particular model has converged, *adding more training data will not help you!*\n",
    "The only way to increase model performance in this case is to use another (often more complex) model.\n",
    "\n",
    "学习曲线的一个著名特征就是当训练样本量增加时，两根曲线会收敛。这意味着，一旦你已经有了足够的样本量使得某种模型已经收敛的话，*增加更多的训练数据不会提供任何帮助*。在这种情况下提升模型性能的唯一方法就是使用另一个（通常更复杂）的模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Learning curves in Scikit-Learn\n",
    "\n",
    "### Scikit-Learn中的学习曲线\n",
    "\n",
    "> Scikit-Learn offers a convenient utility for computing such learning curves from your models; here we will compute a learning curve for our original dataset with a second-order polynomial model and a ninth-order polynomial:\n",
    "\n",
    "Scikit-Learn提供了一个方便的工具来计算模型的学习曲线；下面我们计算我们原始数据集在二阶多项式模型和九阶多项式模型上的学习曲线："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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l77udykiIiIiIiJVKXrXHbj1DaSPPc7vUiY8BRyyczIZ4ldfSebwI8kedrjf1YiIiIiIiFSfXI7oPctJn/BBiMX8rmbCU8AhOyX6x5sJrltL4kuae0NERERERGQw4ccfJfDuuxqeUiEKOGTkXJe6K39Odu99SB9/ot/ViIiIiIiIVKXo8tvxYjHSx53gdymTQsjvAqT2RO6/l9DLL7HtymUQUEYmIiIiIiIygOsSuetO0ouOh4YGv6uZFPTpVEas7oqfk5s9h9SHz/K7FBERERERkaoUevpJgu9sILXkdL9LmTQUcMiIhJ54nPATj5H8/KUQDvtdjoiIiIiISFWKLr8DLxwm/cGT/C5l0lDAISNSd+XluFOnkvz4eX6XIiIiIiIiUp08j+hdd5D+wLF4U5r9rmbSUMAhwxZ8+SWi995D8oKLob7e73JERERERESqUui5vxF8603SuntKRSngkGGrW/oLvLo6khd8zu9SREREREREqlZk+R14wSCpk071u5RJRQGHDEtg3Vqit9xE8hPn4U1t9bscERERERGR6uR5RJffTuZ9R+G16rNTJSngkGGJL1sKQPKSS32uREREREREpHoFnZcJvbqa1Km6e0qlKeCQIVlb2on/13+S+vBZuHPm+l2OiIiIiIhI1Youvx3PskifeprfpUw6CjhkSPHrr8NKJEhc+lW/SxEREREREalq0eV3kD30cNwZM/0uZdJRwCE71tND/JfXkPrgSeT23sfvakRERERERKpWYM1rhF58ntQSDU/xgwIO2aHYjf9FYMsWEpd+ze9SREREREREqlp0+R0Amn/DJwo4ZPsyGequvpLMYUeQPeJIv6sRERERERGpatG7bidz0Hs1d6FPFHDIdkVvv5Xg2rdIfEm9N0RERERERHYksG4t4Wf+SmrJh/wuZdJSwCGD8zzqrvg5WXsB6RNO9LsaERERERGRqha9ywxPSWv+Dd+E/C5AqlPkTysJvfQC2664BgLKwURERERERHYkuvwOsnvvS26P+X6XMmnpk6sMKn7Fz8nNmk3qIx/1uxQREREREZGqZm3cSOh/H9fdU3ymgEMGCD35BJHH/kLyki9COOx3OSIiIiIiIlUtevedWJ6n+Td8poBDBqi74ue4LS0kP/Fpv0sRERERERGpetHld5CdN5/cgr39LmVSU8AhZYLOy0RX3EXys5+D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\n",
      "text/plain": [
       "<Figure size 1152x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.model_selection import learning_curve\n",
    "\n",
    "fig, ax = plt.subplots(1, 2, figsize=(16, 6))\n",
    "fig.subplots_adjust(left=0.0625, right=0.95, wspace=0.1)\n",
    "\n",
    "for i, degree in enumerate([2, 9]):\n",
    "    N, train_lc, val_lc = learning_curve(PolynomialRegression(degree),\n",
    "                                         X, y, cv=7,\n",
    "                                         train_sizes=np.linspace(0.3, 1, 25))\n",
    "\n",
    "    ax[i].plot(N, np.mean(train_lc, 1), color='blue', label='training score')\n",
    "    ax[i].plot(N, np.mean(val_lc, 1), color='red', label='validation score')\n",
    "    ax[i].hlines(np.mean([train_lc[-1], val_lc[-1]]), N[0], N[-1],\n",
    "                 color='gray', linestyle='dashed')\n",
    "\n",
    "    ax[i].set_ylim(0, 1)\n",
    "    ax[i].set_xlim(N[0], N[-1])\n",
    "    ax[i].set_xlabel('training size')\n",
    "    ax[i].set_ylabel('score')\n",
    "    ax[i].set_title('degree = {0}'.format(degree), size=14)\n",
    "    ax[i].legend(loc='best')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> This is a valuable diagnostic, because it gives us a visual depiction of how our model responds to increasing training data.\n",
    "In particular, when your learning curve has already converged (i.e., when the training and validation curves are already close to each other) *adding more training data will not significantly improve the fit!*\n",
    "This situation is seen in the left panel, with the learning curve for the degree-2 model.\n",
    "\n",
    "这是一项非常有价值的价差，因为它为我们提供了模型随着训练数据性能变化的可视化展示。而且当你的学习曲线已经收敛时（例如当训练和验证曲线已经非常接近的情况下）*增加更多的训练数据不会显著的提升拟合度*。这个结论很容易从左图二阶模型的学习曲线中获得。\n",
    "\n",
    "> The only way to increase the converged score is to use a different (usually more complicated) model.\n",
    "We see this in the right panel: by moving to a much more complicated model, we increase the score of convergence (indicated by the dashed line), but at the expense of higher model variance (indicated by the difference between the training and validation scores).\n",
    "If we were to add even more data points, the learning curve for the more complicated model would eventually converge.\n",
    "\n",
    "要提升已经收敛的学习曲线的性能唯一方法就是使用一个不同的（通常更复杂的）模型。我们可以从右图中看到：当使用了复杂的多的模型后，我们将收敛的分数值（使用虚线表示）提升了，付出的代价是更高的模型方差（图中训练曲线和验证曲线的间距）。如果我们继续增加更多的样本，更复杂模型的学习曲线最终也会收敛。\n",
    "\n",
    "> Plotting a learning curve for your particular choice of model and dataset can help you to make this type of decision about how to move forward in improving your analysis.\n",
    "\n",
    "绘制模型和数据集的学习曲线能帮助你作出进一步改善性能的决定。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Validation in Practice: Grid Search\n",
    "\n",
    "## 验证实践：网格搜索\n",
    "\n",
    "> The preceding discussion is meant to give you some intuition into the trade-off between bias and variance, and its dependence on model complexity and training set size.\n",
    "In practice, models generally have more than one knob to turn, and thus plots of validation and learning curves change from lines to multi-dimensional surfaces.\n",
    "In these cases, such visualizations are difficult and we would rather simply find the particular model that maximizes the validation score.\n",
    "\n",
    "前面的讨论意在为你提供直观的偏差和方差权衡的知识，它取决于模型复杂度和训练集规模。在实践中，模型通常有多于一个开关进行调节，因此前面关于验证曲线和学习曲线的二维线条就会变成多维平面。在这些情况下，要将它可视化出来是很困难的，并且我们更希望简单的找到特定模型能最大化验证分数。\n",
    "\n",
    "> Scikit-Learn provides automated tools to do this in the grid search module.\n",
    "Here is an example of using grid search to find the optimal polynomial model.\n",
    "We will explore a three-dimensional grid of model features; namely the polynomial degree, the flag telling us whether to fit the intercept, and the flag telling us whether to normalize the problem.\n",
    "This can be set up using Scikit-Learn's ``GridSearchCV`` meta-estimator:\n",
    "\n",
    "Scikit-Learn提供了自动化的工具来完成这项任务，它们在网格搜索模块中。下面是一个使用网格搜索找到最优多项式模型的例子。我们会探索模型特征的一个三维网格；包括多项式阶数，一个是否你和截距的标志和一个是否归一化问题的标志。这可以通过Scikit-Learn的`GridSearchCV`元评估器来设置："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "param_grid = {'polynomialfeatures__degree': np.arange(21),\n",
    "              'linearregression__fit_intercept': [True, False],\n",
    "              'linearregression__normalize': [True, False]}\n",
    "\n",
    "grid = GridSearchCV(PolynomialRegression(), param_grid, cv=7)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> Notice that like a normal estimator, this has not yet been applied to any data.\n",
    "Calling the ``fit()`` method will fit the model at each grid point, keeping track of the scores along the way:\n",
    "\n",
    "网格搜索模型和普通模型一样，实例化后还未应用到任何数据上。通过调用`fit()`方法会将模型的每个网格点拟合到数据上，同时过程中保存了验证的分数："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/wangy/anaconda3/lib/python3.7/site-packages/sklearn/model_selection/_search.py:813: DeprecationWarning: The default of the `iid` parameter will change from True to False in version 0.22 and will be removed in 0.24. This will change numeric results when test-set sizes are unequal.\n",
      "  DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "grid.fit(X, y);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> Now that this is fit, we can ask for the best parameters as follows:\n",
    "\n",
    "拟合完后，我们可以使用下面代码来获得最佳参数："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'linearregression__fit_intercept': False,\n",
       " 'linearregression__normalize': True,\n",
       " 'polynomialfeatures__degree': 4}"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.best_params_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> Finally, if we wish, we can use the best model and show the fit to our data using code from before:\n",
    "\n",
    "最终，如果我们希望，我们可以使用代码将最佳模型、数据及它们的拟合情况绘制出来："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "model = grid.best_estimator_\n",
    "\n",
    "plt.scatter(X.ravel(), y)\n",
    "lim = plt.axis()\n",
    "y_test = model.fit(X, y).predict(X_test)\n",
    "plt.plot(X_test.ravel(), y_test);\n",
    "plt.axis(lim);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> The grid search provides many more options, including the ability to specify a custom scoring function, to parallelize the computations, to do randomized searches, and more.\n",
    "For information, see the examples in [In-Depth: Kernel Density Estimation](05.13-Kernel-Density-Estimation.ipynb) and [Feature Engineering: Working with Images](05.14-Image-Features.ipynb), or refer to Scikit-Learn's [grid search documentation](http://Scikit-Learn.org/stable/modules/grid_search.html).\n",
    "\n",
    "网格搜索提供很多其他参数，包括指定自定义的评分函数，并行化计算和执行随机搜索等等。需要更多信息，参见[深入：核密度估计](05.13-Kernel-Density-Estimation.ipynb)和[特征工程](05.14-Image-Features.ipynb)，或者参考Scikit-Learn的[网格搜索在线文档](http://Scikit-Learn.org/stable/modules/grid_search.html)。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Summary\n",
    "\n",
    "## 总结\n",
    "\n",
    "> In this section, we have begun to explore the concept of model validation and hyperparameter optimization, focusing on intuitive aspects of the bias–variance trade-off and how it comes into play when fitting models to data.\n",
    "In particular, we found that the use of a validation set or cross-validation approach is *vital* when tuning parameters in order to avoid over-fitting for more complex/flexible models.\n",
    "\n",
    "在本节中，我们开始探讨模型验证和超参数优化的概念，聚焦在偏差方差权衡的直观概念和它在模型拟合数据时扮演的角色。特别是，我们强调使用测试集验证和交叉验证方法的重要性，当在复杂/灵活模型中调节参数时要避免过拟合。\n",
    "\n",
    "> In later sections, we will discuss the details of particularly useful models, and throughout will talk about what tuning is available for these models and how these free parameters affect model complexity.\n",
    "Keep the lessons of this section in mind as you read on and learn about these machine learning approaches!\n",
    "\n",
    "在后续章节中，我们会讨论每个有用模型的细节，并在过程中介绍这些模型可以调节哪些参数以及这些参数如果影响模型复杂度。请将本节的内容牢记，当你在后面继续学习机器学习方法的时候，本节内容会提供重要的帮助。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<!--NAVIGATION-->\n",
    "< [Introducing Scikit-Learn](05.02-Introducing-Scikit-Learn.ipynb) | [Contents](Index.ipynb) | [Feature Engineering](05.04-Feature-Engineering.ipynb) >\n",
    "\n",
    "<a href=\"https://colab.research.google.com/github/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/05.03-Hyperparameters-and-Model-Validation.ipynb\"><img align=\"left\" src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open in Colab\" title=\"Open and Execute in Google Colaboratory\"></a>\n"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
